from .models import WordEntry

GENDER_NUMBER_TAGS = {
    # https://ku.wiktionary.org/wiki/Modul:gender_and_number
    "m": "feminine",
    "n": "masculine",
    "nt": "neuter",
    "g": "common-gender",
    "anim": "animate",
    "inan": "inanimate",
    "animal": "animal-not-person",
    "pers": "personal",
    "npers": "impersonal",
    "vir": "virile",
    "nvir": "nonvirile",
    "yj": "singular",
    "du": "dual",
    "pj": "plural",
    "impf": "imperfective",
    "pf": "perfective",
    "gh": "transitive",
    "ngh": "intransitive",
}

TABLE_TAGS = {
    # Şablon:ku-tewîn-nav
    "Yekjimar": "singular",
    "Pirjimar": "plural",
    "Navkî": "nominative",
    "Îzafe": "construct",
    "Çemandî": "oblique",
    "Nîşandera çemandî": ["demonstrative", "oblique"],
    "Bangkirin": "vocative",
    "Bangkirî": "vocative",
    "Binavkirî": "definite",
    "Nebinavkirî": "indefinite",
    "Mê (yj.)": ["feminine", "singular"],
    "Nêr (yj.)": ["masculine", "singular"],
    "Mê û nêr (pj.)": ["feminine", "masculine", "plural"],
    # Şablon:ku-tew-nav
    "Mê": "feminine",
    "Nêr": "masculine",
    # Şablon:ku-tewîn-rd
    "Pozîtîv": "positive",
    "Komparatîv": "comparative",
    "Sûperlatîv": "superlative",
    # Şablon:ku-tewîn-lk
    "RP.\nNiha": "present",
    "Fermanî": "imperative",
    "RP.\nBoriya\nsade": "past",
    # Şablon:ku-tewandin
    "Dema niha": "present",
    "Dema borî": "past",
    "Reh": "root",
    "Raweya pêşkerî (daxuyanî) - Indicative": "indicative",
    "Dema niha - Present": "present",
    "Raboriya sade - Preterite\nDema boriya têdeyî": "past",
    "Erênî": "positive",
    "Neyînî": "negative",
    "Raboriya berdest - Imperfect\nÇîrokiya dema niha": "imperfect",
    "Raboriya dûr - Pluperfect\nÇirokiye boriya têdeyî": "pluperfect",
    "Dema bê - Future": "future",
    "Dahatiya pêş - Future perfect": ["future", "perfect"],
    "Raboriya dûdar - Perfect\nDema boriya dûdar": "perfect",
    "Çîrokiya boriya dûdar - Nonconfirmative pluperfect": [
        "nonconfirmative",
        "pluperfect",
    ],
    # "Raweya xwestekî (bilanî, daxwazî) - Subjunctive": "subjunctive",
    "Dema nihaya xwestekî - Present subjunctive\nNihaya bilaniyê": [
        "present",
        "subjunctive",
    ],
    "Dema boriya xwestekî - Preterite subjunctive": [
        "preterite",
        "subjunctive",
    ],
    "Raboriya bilaniyê - Imperfect subjunctive": ["imperfect", "subjunctive"],
    "Raboriya dûr a bilaniyê - Pluperfect subjunctive": [
        "pluperfect",
        "subjunctive",
    ],
    "Çîrokiya dema nihaya mercî - Present conditional": [
        "present",
        "conditional",
    ],
    "Dema boriya mercî - Preterite conditional": ["preterite", "conditional"],
    "Raweya fermanî - Imperative": "imperative",
    "Standard": "standard",
}

GLOSS_TAGS = {
    # Modul:ferhengok
    # Modul:ferhengok/dane
    "berfirehkirî": "broadly",
    # Modul:dara_kategoriyan/ferhengokkatbike/dane/ferhengok
    "dewleta Ewropayê": "Europe",
    "dewleta Asyayê": "Asia",
    "dewleta Afrîkayê": "Africa",
    "dewleta Amerîkaya Başûr": "South-America",
    "devokî": "dialectal",
    "formên kevnbûyî": "archaic",
    "hevdeng": "homophone",
    "japonî": "Japanese",
    "metonîm": "metonymically",
    "mîtolojiya ermenî": "Armenian",
    "mîtolojiya îranî": "Iranian",
    "mîtolojiya kurdî": "Kurdish",
    "mîtolojiya misrî": "Egyptian",
    "mîtolojiya yûnanî": "Greek",
    "nifir": "vulgar",
    "neolojîzm": "neologism",
    "niqteşanî": "punctuation",
    "na": "name",
    # Modul:dara kategoriyan/ferhengokkatbike/dane/rêzimanî
    "zimanê zarokan": "childish",
    "şaşnivîsî": "misspelling",
    "latînîkirin": "romanization",
    "palîndrom": "palindrome",
    "paşnav": "surname",
    "navê keçan": "name",
    "navê kesan": "name",
    "navê lawan": "name",
    # "rêziman": "lemmas",
    "dengê siriştî": "onomatopoeic",
    "argo": "slang",
    "argoya fandomê": "slang",
    # "jinkanî": "women's-speech",
    "artîkel": "article",
    "akronîm": "acronym",
    "baneşan": "interjection",
    # "bazinedaçek": "circumposition",
    "biwêjî": "idiomatic",
    "cînav": "pronoun",
    # "cotepeyv": "",
    "daçek": "prepositional",
    "girêdek": "conjunction",
    "gotinên pêşiyan": "proverb",
    "hejmar": "numeral",
    "hevok": "phrase",
    "hoker": "adverb",
    "neqiyasbar": "not-comparable",
    "kurtenav": "abbreviation",
    "kurtkirin": "contraction",
    "lêker": "verb",
    "Lêker": "verb",
    "navdêr": "noun",
    "Navdêr": "noun",
    "jimarbar": ["countable", "noun"],
    "nejimarbar": ["uncountable", "noun"],
    "navgir": "interfix",
    "paşdaçek": "postpositional",
    "paşgir": "suffix",
    "pêşdaçek": "prepositional",
    "pêşgir": "prefix",
    "pirtik": "particle",
    "reh": "root",
    "rengdêr": "adjective",
    "Rengdêr": "adjective",
    "sembol": "symbol",
    "serenav": "proper-noun",
    "tîp": "letter",
    "tewandin": "conjugative",
    "rehê lêkeran": ["verb", "root"],
    "rehê dema niha": ["present", "root"],
    "rehê dema borî": ["past", "root"],
    "partîsîp": "participle",
    "partîsîpa niha": ["present", "participle"],
    "partîsîpa borî": ["past", "participle"],
    "komparatîv": "comparative",
    "sûperlatîv": "superlative",
    "xweşbêjî": "euphemistic",
    "formên serenavan": ["proper-noun", "form-of"],
    "formên navdêran": ["noun", "form-of"],
    "formên cînavan": ["pronoun", "form-of"],
    "formên hokeran": ["adverb", "form-of"],
    "formên rengdêran": ["adjective", "form-of"],
    "formên lêkeran": ["verb", "form-of"],
    "awarte": ["irregular", "verb"],
    "gerguhêz": ["transitive", "verb"],
    "negerguhêz": ["intransitive", "verb"],
    "lêkerên biwêjî": ["phrasal", "verb"],
    "lêkerên biwêjî yên gerguhêz": ["transitive", "phrasal", "verb"],
    "lêkerên biwêjî yên negerguhêz": ["intransitive", "phrasal", "verb"],
    "lêkerên hevedudanî": ["compound", "verb"],
    "lêkerên hevedudanî yên gerguhêz": ["compound", "verb", "transitive"],
    "lêkerên hevedudanî yên negerguhêz": ["compound", "verb", "intransitive"],
    "lêkerên pêkhatî": ["compound", "verb"],
    "lêkerên pêkhatî yên gerguhêz": ["compound", "verb", "transitive"],
    "lêkerên pêkhatî yên negerguhêz": ["compound", "verb", "intransitive"],
    # "lêkerên xwerû": "proper-noun",
    "lêkerên xwerû yên gerguhêz": ["verb", "transitive"],
    "lêkerên xwerû yên negerguhêz": ["verb", "intransitive"],
    "serenavên mê": ["feminine", "proper-noun"],
    "rengdêrên mê": ["feminine", "adjective"],
    "navdêrên mê": ["feminine", "noun"],
    "cînavên mê": ["feminine", "pronoun"],
    "serenavên nêr": ["masculine", "proper-noun"],
    "rengdêrên nêr": ["masculine", "adjective"],
    "navdêrên nêr": ["masculine", "noun"],
    "cînavên nêr": ["masculine", "pronoun"],
    "serenavên nêtar": ["neuter", "proper-noun"],
    "rengdêrên nêtar": ["neuter", "adjective"],
    "navdêrên nêtar": ["neuter", "noun"],
    "cînavên nêtar": ["neuter", "pronoun"],
    "serenavên mê û nêr": ["feminine", "masculine", "proper-noun"],
    "navdêrên mê û nêr": ["feminine", "masculine", "noun"],
    "rengdêrên mê û nêr": ["feminine", "masculine", "adjective"],
    "cînavên mê û nêr": ["feminine", "masculine", "pronoun"],
    "serenavên giştî": ["general", "proper-noun"],
    "rengdêrên giştî": ["general", "adjective"],
    "navdêrên giştî": ["general", "noun"],
    "cînavên giştî": ["general", "pronoun"],
    "serenavên ku bi gelemperî mê ne": ["feminine", "proper-noun"],
    "rengdêrên ku bi gelemperî mê ne": ["feminine", "adjective"],
    "navdêrên ku bi gelemperî mê ne": ["feminine", "noun"],
    "cînavên ku bi gelemperî mê ne": ["feminine", "pronoun"],
    "serenavên ku bi gelemperî nêr in": ["masculine", "proper-noun"],
    "rengdêrên ku bi gelemperî nêr ne": ["masculine", "adjective"],
    "navdêrên ku bi gelemperî nêr ne": ["masculine", "noun"],
    "cînavên ku bi gelemperî nêr ne": ["masculine", "pronoun"],
    "serenavên ku bi gelemperî pirjimar in": ["plural", "proper-noun"],
    "rengdêrên ku bi gelemperî pirjimar ne": ["plural", "adjective"],
    "navdêrên ku bi gelemperî pirjimar ne": ["plural", "noun"],
    "cînavên ku bi gelemperî pirjimar ne": ["plural", "pronoun"],
    # Modul:dara_kategoriyan/ferhengokkatbike/dane/mane
    # "biçûkxister": "",
    "fermî": "formal",
    # "henekî": "",
    # "kêmtir": "",
    "kevnare": "archaic",
    "kêmpeyda": "rare",
    "kevnbûyî": "obsolete",
    "kolankî": "colloquial",
    "mecazî": "figurative",
    "nadir": "rare",
    "nefermî": "informal",
    # "qebe": "",
    "wêjeyî": "literary",
    # "xirab": "bad",
    "kurdî-erebî": "Kurdish-Arabic",
    "kurdî-krîlî": "Kurdish-Cyrillic",
}

SOUND_TAGS = {
    "DYA": "USA",
    "Teksas": "Texas",
    "Berlîn": "Berlin",
    "Almanya": "Germany",
    "Connecticut": "Connecticut",
    "QY": "UK",
    "Başûrê Îngilistanê": "Southern-England",
    "Bidlîs": "Bitlis",
    "London": "London",
    "Awistirya": "Austria",
    "Îzmîr": "İzmir",
    "Tirkiye": "Turkey",
    "Awistralya": "Australia",
    "Lyon": "Lyon",
    "Fransa": "France",
    "Îran": "Iran",
    "Îtalya": "Italy",
    "Çîn": "China",
}

TAGS = {**GENDER_NUMBER_TAGS, **TABLE_TAGS, **GLOSS_TAGS, **SOUND_TAGS}

TOPICS = {
    # Modul:dara_kategoriyan/ferhengokkatbike/dane/ferhengok
    "ajal": "livestock",
    "aman": "kitchenware",
    "amûr": "tools",
    "anatomî": "anatomy",
    "antropolojî": "anthropology",
    "astrolojî": "astrology",
    "avjenî": ["swimming", "sports"],
    "astronomî": "astronomy",
    # "avahî û pêkhate": "Buildings and structures",
    # "avahî": "buildings",
    # "alavên malê": "home appliances",
    # "atmosfer": "atmosphere",
    "alava muzîkê": "music",
    "astronotîk": "astronautics",
    # "ba": "wind",
    "berhemên behrê": ["seafood", "cuisine"],
    "bajar": "cities",
    "balinde": "birds",
    "basketbol": ["basketball", "ball-games"],
    "bijîşkî": "medicine",
    "biyolojî": "biology",
    "boks": ["boxing", "martial-arts"],
    "buxik": ["insects", "entomology"],
    "behr": "seas",
    "berf": "snow",
    "bazarkarî": "marketing",
    "Cihûtî": "Judaism",
    "cilûberg": "clothing",
    "civak": "society",
    "cih": "places",
    "çand": "culture",
    "çandinî": "agriculture",
    "çek": "weaponry",
    "çiya": "mountains",
    "devkî": "oral",
    "dewleta Ewropayê": "countries",
    "dewleta Asyayê": "countries",
    "dewleta Afrîkayê": "countries",
    "dar": "trees",
    "dîn": "religion",
    "dîrok": "history",
    "dewlet": "countries",
    "dehsal": "decades",
    "dewleta Amerîkaya Başûr": "countries",
    "deryagerî": "nautical",
    "demsal": "seasons",
    "ekonomî": "economics",
    # "evîn": "love",
    # "element": "chemical elements",
    "erdnîgarî": "geography",
    # "emir": "age",
    "elektrîk": "electricity",
    "fêkî": "fruits",
    "felsefe": "philosophy",
    "femînîzm": "feminism",
    "fizîk": "physics",
    "futbol": "football",
    "fîzyolojî": "physiology",
    "guhandar": "mammals",
    # "gund": "villages",
    # "hest": "emotions",
    # "hiş": "mind",
    # "hemû mijar": "list of topics",
    "herêm": "region",
    "hewa": "weather",
    "hiqûq": "law",
    "hewavanî": "aviation",
    "heywan": "animals",
    "Hinduîzm": ["hinduism", "religion"],
    "huner": "arts",
    "informatîk": "information-technology",
    "înternet": "Internet",
    "Îslam": ["Islam", "religion"],
    "îdeolojî": "ideology",
    # "jîndar": "lifeforms",
    "jeolojî": "geology",
    # "kar": "work",
    "karsazî": "business",
    "kîmya": "chemistry",
    "kişik": ["chess", "board-games"],
    "kompûternasî": "computing",
    # "kulîlk": "flowers",
    # "kes": "people",
    # "lîsteya ferhengan": "All topics",
    "leşkerî": "military",
    "lîstik": "games",
    "lîstikên vîdeoyî": "video-games",
    "lîstika zarokan": "children's-games",
    "leş": ["body", "anatomy"],
    "mitfax": "kitchen",
    # "mînak": "example",
    # "mal": "home",
    # "malbat": "family",
    "masî": ["fish", "zoology"],
    "matematîk": "mathematics",
    # "mehên salê": "months",
    "mekanîk": "mechanics",
    "Mesîhî": "Christianity",
    # "meslek": "occupations",
    "metrolojî": "metrology",
    "mîtolojî": "mythology",
    "mîtolojiya ermenî": "mythology",
    "mîtolojiya îranî": "mythology",
    "mîtolojiya kurdî": "mythology",
    "mîtolojiya misrî": "mythology",
    "mîtolojiya yûnanî": "mythology",
    "mobîlya": "furniture",
    "mode": "fashion",
    "muzîk": "music",
    # "omirov": "human",
    "makîne": "machining",
    "mîmarî": "architecture",
    # "malper": "websites",
    # "mirin": "death",
    "muzîsyen": "music",
    # "nifş": "generations",
    "navçe": "districts",
    "Navçe": "districts",
    "navgîn": "vehicles",
    "nivîsîn": "writing",
    "nexweşî": "pathology",
    "neqliyat": "transport",
    # "ode": "rooms",
    "optîk": "optics",
    # "octanes": "oceans",
    "otomotîv": "automotive",
    "parzemîn": "continents",
    "parêzgeh": "provinces",
    "perwerde": "education",
    "psîkolojî": "psychology",
    "psîkyatrî": "psychiatry",
    "por": "hairdressing",
    # "Pêxemberên Îslamê": "islamic prophets",
    # "pûrizm": "",
    "rêzimanî": "grammar",
    "remldarî": "divination",
    "reng": "color",
    "riwek": "botany",
    "riweknasî": "botany",
    "robar": "rivers",
    "Robar": "rivers",
    "sosyolojî": "sociology",
    "salnameya koçî": "Islamic months",
    "sebze": "vegetable",
    "siyaset": "politics",
    "spor": "sports",
    # "sal": "years",
    "sûc": "crime",
    "sîstemên nivîsînê": "writing",
    "Şahname": "shahnameh",
    "şîranî": "desserts",
    "teknolojî": "technology",
    "tenîs": ["tennis", "sports"],
    "teolojî": "theology",
    "tilyak": "drugs",
    # "termên teqwîmê": "calendar terms",
    "toksîkolojî": "toxicology",
    "televizyon": "television",
    "vexwarin": "beverages",
    "wêje": "literature",
    "wênegirî": "photography",
    # "www": "",
    "xweza": "nature",
    "xwarin û vexwarin": ["food", "beverages"],
    "xişok": "reptiles",
    "xwarin": "food",
    "zanist": "sciences",
    "zeman": "time",
    "Zerdeştî": ["Zoroastrianism", "religion"],
    "ziman": "language",
    "zimannasî": "linguistics",
    "zoolojî": "zoology",
    "zanistên sepandî": "applied-sciences",
    "Herêm": "region",
}


PRONOUN_TAGS = {
    # Template:ku-tewîn-lk
    # https://en.wikipedia.org/wiki/Kurdish_grammar
    "ez": ["first-person", "singular"],
    "tu": ["second-person", "singular"],
    "ew": ["third-person", "singular"],
    "em, hûn, ew": ["first-person", "second-person", "third-person", "plural"],
    "min": ["first-person", "singular"],
    "te": ["second-person", "singular"],
    "wê/wî": ["third-person", "singular"],
    "me, we, wan": ["first-person", "second-person", "third-person", "plural"],
}


def translate_raw_tags(data: WordEntry) -> None:
    raw_tags = []
    for raw_tag in data.raw_tags:
        has_tag = False
        for index, tag_dict in enumerate([TAGS, PRONOUN_TAGS]):
            if raw_tag in tag_dict and hasattr(data, "tags"):
                tr_tag = tag_dict[raw_tag]
                if isinstance(tr_tag, str):
                    data.tags.append(tr_tag)
                elif isinstance(tr_tag, list):
                    data.tags.extend(tr_tag)
                if index == 0:
                    has_tag = True
        if raw_tag in TOPICS and hasattr(data, "topics"):
            topic = TOPICS[raw_tag]
            if isinstance(topic, str):
                data.topics.append(topic)
            elif isinstance(topic, list):
                data.topics.extend(topic)
            has_tag = True
        if not has_tag:
            raw_tags.append(raw_tag)
    data.raw_tags = raw_tags
